home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
lang
/
mc302
/
dosutil
/
size.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-03-18
|
2KB
|
80 lines
/*
* Reads one or more files, and displays the number of lines, and the
* total size of the file in bytes.
*
* Demonstrates setting up and using a two byte counter, which is used
* to keep track of the total number of characters. Up to 655350000
* characters can be counted.
*
* Copyright 1991-1994 Dave Dunfield
* All rights reserved.
*
* Permission granted for personal (non-commercial) use only.
*
* Compile command: cc size -fop
*/
#include <stdio.h>
unsigned tlines = 0, tcharh = 0, tcharl = 0;
/*
* Convert a double word number to an ASCII string
*/
char *dtoa(high, low)
unsigned high, low;
{
static char dtoabuf[10];
if(high)
sprintf(dtoabuf,"%u%04u", high, low);
else
sprintf(dtoabuf,"%u", low);
return dtoabuf;
}
/*
* Main program, determine size of files
*/
main(argc, argv)
int argc;
char *argv[];
{
unsigned i;
FILE *fp;
if(argc == 1)
dosize(stdin,"<stdin>");
else {
for(i=1; i < argc; ++i)
if(fp = fopen(argv[i],"rvb")) {
dosize(fp,argv[i]);
fclose(fp); } }
if(argc > 2)
printf("\nTotal of %s characters, %u lines.\n", dtoa(tcharh, tcharl), tlines);
}
/*
* Process an individual file & determine its size
*/
dosize(fp, name)
FILE *fp;
char *name;
{
unsigned lines, charh, charl, chr;
lines = charh = charl = 0;
while((chr = getc(fp)) != -1) {
if(++charl >= 10000) {
++charh;
charl -= 10000; }
if(chr == '\n')
++lines; }
tlines += lines;
if((tcharl += charl) >= 10000) {
++tcharh;
tcharl -= 10000; }
tcharh += charh;
printf("%12s characters,%5u lines in file: '%s'\n", dtoa(charh, charl), lines, name);
}